package br.com.djiadreams.georeferencedsignalproject;

import java.util.List;

import br.com.djiadreams.extras.FabricaDePontos;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMyLocationButtonClickListener;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.PolygonOptions;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class MapActivity extends FragmentActivity {
	private GoogleMap mapa;
	private double lat, lon;
	private String operadora, qualidade;
	private Marker marcador;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_map);
		// uso SupportMapFragment pq a API minima que estou usando eh a 10
		// se fosse >=11 poderia usar apenas MapFragment
		mapa = ((SupportMapFragment) getSupportFragmentManager()
				.findFragmentById(R.id.map)).getMap();
		// recebo os dados enviados pela activity chamadora
		Bundle recebido = getIntent().getExtras();
		lat = recebido.getDouble("lat");
		lon = recebido.getDouble("long");
		operadora = recebido.getString("operadora");
		qualidade = recebido.getString("qualidade");
		// move a camera para uma posi��o
		mapa.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(lat, lon)));
		marcador = mapa.addMarker(criarMarker(lat, lon));
		// ativa o bot�o que atualiza sua posi��o
		//mapa.setMyLocationEnabled(true);
		// seto o adaptador para o infowindow customizado
		mapa.setInfoWindowAdapter(new AdaptadorInfoWindow(this));
		mapa.setOnMyLocationButtonClickListener(new OnMyLocationButtonClickListener() {
			@Override
			public boolean onMyLocationButtonClick() {
				// TODO Auto-generated method stub
				lat = mapa.getCameraPosition().target.latitude;
				lon = mapa.getCameraPosition().target.longitude;
				marcador.remove();
				marcador = mapa.addMarker(criarMarker(lat, lon));
				marcador.showInfoWindow();
				return false;
			}
		});
		setPoligonos();
	}

	private void setPoligonos() {
		List<PolygonOptions> lista = FabricaDePontos.retornaPontos(this);
		for (PolygonOptions p : lista) {
			mapa.addPolygon(p);
		}
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
	}

	public MarkerOptions criarMarker(double lat, double lon) {
		MarkerOptions marker = new MarkerOptions();
		marker.position(new LatLng(lat, lon));
		marker.title(operadora);
		marker.snippet(qualidade);
		return marker;
	}
}